import { RouteCallback } from './type'

export default class EventRoute {
  event: string
  type?: string
  callback: RouteCallback

  /** 创建路由实例
   * @description 如果省略 `callback`, 则 type 为 `callback`
   * @param event - 要监听的事件。
   * @param type - 路由分类。
   * @param  callback - 当事件被触发时要执行的回调函数。
   * */
  constructor(event: string, type: string | RouteCallback, callback?: RouteCallback) {
    this.event = event

    const isOmitType = typeof type === 'function'

    this.type = isOmitType ? undefined : type
    this.callback = isOmitType ? type : (callback as RouteCallback)
  }

  // 使得在 modules 中不用写 type
  setType(type: string) {
    this.type = type
    return this
  }
}
